﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Sireass.Bl;
using Csla;
using Telerik.Web.UI;
using System.Data;
using System.Configuration;
using System.Web.Security;
using Sireass.Bl.Security;
using log4net;
using Sireass.Asp.Util;


namespace Sireass.Asp.Administracion
{
	public partial class CatalogoUnidadResponsable1 : System.Web.UI.Page
	{
		// Create a logger for use in this class
		private static readonly ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

		#region Page
		protected void Page_Load(object sender, EventArgs e)
		{
			if (!IsPostBack)
			{
				Security.ValidarSeguridad(Response, HttpContext.Current.User.Identity, typeof(UnidadResponsableList));
				//cargando los combos
				//Cargo 
				radCmbCargo.DataSource = NombreValorList.GetNombreValorList(new SingleCriteria<string>("Cat_Cargo"));
				radCmbCargo.DataBind();
				//Escuela
				radCmbEscuela.DataSource = NombreValorList.GetNombreValorList(new SingleCriteria<string>("Cat_Escuela"));
				radCmbEscuela.DataBind();
				//listado de Unidades Responsables
				CargaUnidadesResponsables();
			}
			else
			{

				lblExito.Text = string.Empty;
				lblError.Text = string.Empty;
			}

		}
		#endregion

		#region Botones

		protected void radBtnRegresar_Click(object sender, EventArgs e)
		{
			ControlesInicio();
			mvwAdministracionUR.ActiveViewIndex = 0;
		}

		protected void radBtnGuardar_Click(object sender, EventArgs e)
		{
			RadButton btn = (RadButton)sender;
			if (btn.Text == "Guardar")
			{
				if (InsertaUR() == true)
				{
					lblExito.Text = "Operación realizada con éxito";
				}
				else return;

			}
			else // Actualizar
			{
				long intIdUR = (long)ViewState["vwsIdUR"];
				if (ActualizaUR(intIdUR) == true)
				{
					lblExito.Text = "Operación realizada con éxito";
				}
				else return;
			}

			CargaUnidadesResponsables();
			mvwAdministracionUR.ActiveViewIndex = 0;
			ControlesInicio();
		}

		#endregion

		#region Grid
		protected void radGrdListado_ItemCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e)
		{
			try
			{
				string strComando = e.CommandName;
				long intIdUnidadResponsable;
				switch (strComando)
				{

					case "Editar":
						intIdUnidadResponsable = (long)radGrdListado.MasterTableView.Items[e.Item.ItemIndex].GetDataKeyValue("IdUnidadResponsable");
						ViewState["vwsIdUR"] = intIdUnidadResponsable;
						if (CargaDatosUnidadResponsable(intIdUnidadResponsable) == true)
						{
							lblRegistroEdicion.Text = "EDICIÓN";
							mvwAdministracionUR.ActiveViewIndex = 1;
							radBtnGuardar.Text = "Actualizar";
						}
						else return;
						break;
					case "Nuevo":
						lblRegistroEdicion.Text = "REGISTRO";
						mvwAdministracionUR.ActiveViewIndex = 1;

						break;

					case "Eliminar":
						intIdUnidadResponsable = (long)radGrdListado.MasterTableView.Items[e.Item.ItemIndex].GetDataKeyValue("IdUnidadResponsable");
						if (EliminaUR(intIdUnidadResponsable) == true)
						{
							lblExito.Text = "Operación realizada con éxito";
							CargaUnidadesResponsables();

						}

						break;

					default: break;

				} //fin switch

			}
			catch (Exception ex)
			{
				lblError.Text = ex.Message;
			}
		}

		protected void radGrdListado_PageIndexChanged(object sender, GridPageChangedEventArgs e)
		{
			CargaUnidadesResponsables();
		}

		protected void radGrdListado_PageSizeChanged(object sender, GridPageSizeChangedEventArgs e)
		{
			CargaUnidadesResponsables();
		}

		protected void radGrdListado_PreRender(object sender, EventArgs e)
		{
			try
			{
				CheckBox chk;
				string strHabilitado;

				foreach (GridDataItem celda in radGrdListado.Items)
				{
					chk = (CheckBox)celda["Activado"].FindControl("chkHabilitado");
					strHabilitado = celda["Habilitado"].Text;

					if (strHabilitado == "True")
						chk.Checked = true;

					else
						chk.Checked = false;
				}


			}
			catch (Exception ex)
			{
				lblError.Text = ex.Message;
			}
		}

		#endregion

		#region Métodos
		/// <summary>
		/// Realiza la inserción de la unidad responsable
		/// </summary>
		/// <returns>true, si la operación fue exitosa</returns>
		protected Boolean InsertaUR()
		{
			try
			{

				UnidadResponsableEdit objUREdit = UnidadResponsableEdit.NewUnidadResponsableEdit();
				objUREdit.UnidadResponsable = radTxtUnidadResponsable.Text.Trim();
				objUREdit.IdCargo = Convert.ToInt64(radCmbCargo.SelectedValue);
				objUREdit.IdEscuela = Convert.ToInt64(radCmbEscuela.SelectedValue);
				objUREdit.Telefono = radMskTelefono.Text;
				objUREdit.Correo = radTxtEmail.Text;
				objUREdit.Ubicacion = radTxtUbicacion.Text.Trim();
				objUREdit.Habilitado = chkActivo.Checked;
				objUREdit.Save();
				return true;
			}

			catch
			{
				lblError.Text = "Ocurrió un error al insertar los datos. Inténtelo de nuevo";
				return false;
			}
		}
		/// <summary>
		/// Realiza la actualización de una determinada unidad responsable
		/// </summary>
		/// <param name="intIdUR">Identificador de la unidad responsable</param>
		/// <returns>true, si la operación fue exitosa</returns>
		protected Boolean ActualizaUR(long intIdUR)
		{
			try
			{
				UnidadResponsableEdit objUREdit;
				objUREdit = UnidadResponsableEdit.GetUnidadResponsableEdit(intIdUR);
				objUREdit.UnidadResponsable = radTxtUnidadResponsable.Text.Trim();
				objUREdit.IdCargo = Convert.ToInt64(radCmbCargo.SelectedValue);
				objUREdit.IdEscuela = Convert.ToInt64(radCmbEscuela.SelectedValue);
				objUREdit.Telefono = radMskTelefono.Text;
				objUREdit.Correo = radTxtEmail.Text;
				objUREdit.Ubicacion = radTxtUbicacion.Text.Trim();
				objUREdit.Habilitado = chkActivo.Checked;
				objUREdit.Save();

				return true;
			}
			catch
			{
				lblError.Text = "Ocurrió un error al actualizar los datos. Inténtelo de nuevo";
				return false;

			}


		}
		/// <summary>
		/// Elimina la unidad responsable solicitada
		/// </summary>
		/// <param name="intIdUR">Identificador de la unidad responsable</param>
		/// <returns>true, si se eliminó correctamente</returns>
		protected Boolean EliminaUR(long intIdUR)
		{

			try
			{
				UnidadResponsableEdit.DeleteUnidadResponsableEdit(intIdUR);
				return true;
			}

			catch
			{
				lblError.Text = "Ocurrió un error al eliminar. Inténtelo de nuevo";
				return false;
			}


		}
		/// <summary>
		/// Carga los datos de una unidad responsable en particular
		/// </summary>
		/// <param name="intIdUr">Identificador de la unidad responsable</param>
		/// <returns>true, si la carga de datos es exitosa</returns>
		protected Boolean CargaDatosUnidadResponsable(long intIdUr)
		{

			try
			{
				UnidadResponsableEdit objUREdit = UnidadResponsableEdit.NewUnidadResponsableEdit();
				objUREdit = UnidadResponsableEdit.GetUnidadResponsableEdit(intIdUr);
				radCmbEscuela.SelectedValue = Convert.ToString(objUREdit.IdEscuela);
				radCmbCargo.SelectedValue = Convert.ToString(objUREdit.IdCargo);
				radTxtUnidadResponsable.Text = objUREdit.UnidadResponsable;
				radTxtUbicacion.Text = objUREdit.Ubicacion;
				radMskTelefono.Text = objUREdit.Telefono;
				chkActivo.Checked = objUREdit.Habilitado;
				radTxtEmail.Text = objUREdit.Correo;
				return true;
			}

			catch
			{
				lblError.Text = "Ocurrió un error al cargar los datos de la unidad responsable. Inténtelo de nuevo";
				return false;
			}


		}

		/// <summary>
		/// Función que carga el listado de Unidades Responsables en el control RadGrid
		/// </summary>
		/// <returns>true, si se realizó con éxito la carga de datos</returns>
		protected Boolean CargaUnidadesResponsables()
		{   //para mostrar todos los datos hay qeu ajustar el select del spd y la clase URInfo y agregar la propiedad
			try
			{

				radGrdListado.DataSource = UnidadResponsableList.GetUnidadResponsableList();
				radGrdListado.DataBind();
				return true;

			}

			catch (Exception ex)
			{

				lblError.Text = ex.Message;
				return false;
			}


		}
		/// <summary>
		/// Establece el estado inicial de los controles del formulario
		/// </summary>
		private void ControlesInicio()
		{
			radCmbCargo.ClearSelection();
			radCmbCargo.Text = string.Empty;
			radCmbEscuela.ClearSelection();
			radCmbEscuela.Text = string.Empty;
			radTxtEmail.Text = string.Empty;
			radTxtUnidadResponsable.Text = string.Empty;
			radTxtUbicacion.Text = string.Empty;
			radMskTelefono.Text = string.Empty;
			chkActivo.Checked = false;
			radBtnGuardar.Text = "Guardar";
			ViewState["vwsIdUR"] = null;
		}
		#endregion
	}
}